/**
 * 说明:
 *      1. 重复压入无效.
 * 输出:
 *      Set { 1 }
 */
function addTest() {
    let aSet = new Set();
    aSet.add(1);
    aSet.add(1);
    console.log(aSet);
}

/**
 * 输出:
 *      Set { 1, 2, 3 } '容量:' 3
 *      Set { 1, 3 } '容量:' 2
 *      false true
 *      执行clear之后的size: 0
 * 说明:
 *      1. 删除set中的指定值;
 *          - 重复的删除无效;
 *      2. size属性表示当前set的个数;
 *      3. has方法用来判断当前set中是否包含指定值;
 *      4. clear会清空整个set;
 */
function deleteTest() {
    let aSet = new Set();
    aSet.add(1);
    aSet.add(2);
    aSet.add(3);
    console.log(aSet, "容量:", aSet.size);
    aSet.delete(2);
    aSet.delete(2);
    console.log(aSet, "容量:", aSet.size);
    console.log(aSet.has(2), aSet.has(3));
    aSet.clear();
    console.log("执行clear之后的size:", aSet.size);
}

/**
 * 输出:
 *      [ 1, 2, 3 ]
 *      [ 1, 2, 3 ]
 * 说明:
 *      1. Array.from可以将set转换为数组;
 *          - Set可能不能向后台传值, 但是Array肯定可以;
 *      2. 使用es6的...运算符也可以达到效果.
 */
function setTransformToArray() {
    let aSet = new Set();
    aSet.add(1);
    aSet.add(2);
    aSet.add(3);
    console.log(Array.from(aSet));
    console.log([...aSet]);
}

/**
 * 输出:
 *      Set { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
 *      [ 6, 7, 8, 9, 10 ]
 * 说明:
 *      1. Array方法可以使用filter进行过滤, set结构使用可以先将set转换为Array进行处理.
 */
function setFilter() {
    let aSet = new Set();
    for (let i = 0; i < 11; i++) {
        aSet.add(i);
    }
    console.log(aSet);
    console.log(Array.from(aSet).filter(item => item > 5));
}

/**
 * 输出:
 *      [ 1, 2, 3, 4, 5, 6 ]
 * 说明:
 *      1. Set天然不可重复, 可以使用这个方法进行快速去重;
 */
function arrayDeduplication() {
    let a = [1, 2, 2, 3, 4, 5, 6];
    console.log([...new Set(a)]);
}

/**
 * 输出:
 *      {"idList":{}}
 *      {"idList":[1,2,3,4]}
 * 说明:
 *      1. Set结构不可以直接序列化, 序列化的结果为空对象;
 *          - 可以先转为Array, 然后再序列化.
 */
function setJson() {
    let aSet = new Set([1, 2, 3, 4]);
    let obj = {};
    obj.idList = aSet;
    console.log(JSON.stringify(obj));
    obj.idList = [...aSet];
    console.log(JSON.stringify(obj));
}

// addTest();
// deleteTest();
// setTransformToArray();
// setFilter();
// arrayDeduplication();
setJson();